package com.ainge.easystudy.designpattern.strategy;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

/**
 * @author: Ainge
 * @Time: 2021/4/25 21:02
 */
public class PayStrategy {
    /**
     * 容器，spring项目可用bean代替
     */
    private static Map<PayType, Payment> payStrategy = new HashMap<>();

    static {
        payStrategy.put(PayType.ALIPAY, new AliPay());
        payStrategy.put(PayType.JDPAY, new JDPay());
        payStrategy.put(PayType.Wechatpay, new WeChatPay());
        payStrategy.put(PayType.UNIONPAY, new UnionPay());
    }

    /**
     * 根据支付编码获取支付策略
     *
     * @param payTypeCode 支付类型对应的编码
     * @return 如果获取不到对应的策略，就默认使用支付宝支付
     */
    public static Payment get(String payTypeCode) {
        return Optional.ofNullable(payStrategy.get(PayType.getPayTypeByCode(payTypeCode)))
                .orElseGet(() -> payStrategy.get(PayType.ALIPAY));
    }

}
